Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit c11c112ad85cee12f0c7087996b9d7d46ca339ce


Parents : 6e8ab5a
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-23T02:31:32-05:00

chore(docs): update README to reflect changes in APK build process, emphasizing slim flavor and ABI packaging options

Changes

7 files changed, 119 insertions(+), 93 deletions(-)

M README.md +16 -15

Diff

diff --git a/README.md b/README.md
index 735375b2..9d24ba9f 100644
--- a/README.md
+++ b/README.md
@@ -219,33 +219,34 @@ From repo root:
# 1) Build Chaquopy wheels used by android/app/build.gradle
bash scripts/build-android-wheels-local.sh
-# 2) Build both APK variants
+# 2) Build default slim APKs (universal packaging: one APK per flavor+type)
cd android
-./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease
```
-APK outputs (ABI splits plus a universal APK; see `splits { abi { ... } }` in `android/app/build.gradle`):
+APK layout uses **product flavors** `slim` and `full` (Python tree size) plus **ABI packaging** `universal` (default) or `split` (see `android/app/build.gradle`).
-Debug (`android/app/build/outputs/apk/debug/`):
+With **`-PmeshchatxAbiPackaging=universal`** (default), each variant is a single APK containing every selected ABI:
-- `app-arm64-v8a-debug.apk` (ARM64 devices)
-- `app-x86_64-debug.apk` (x86_64 emulators)
-- `app-armeabi-v7a-debug.apk` (32-bit ARM devices)
-- `app-universal-debug.apk` (all bundled ABIs in one package)
+Debug (`android/app/build/outputs/apk/slim/debug/`):
-Release (`android/app/build/outputs/apk/release/`):
+- `app-slim-debug.apk`
-- `app-arm64-v8a-release-unsigned.apk`
-- `app-x86_64-release-unsigned.apk`
-- `app-armeabi-v7a-release-unsigned.apk`
-- `app-universal-release-unsigned.apk`
+Release (`android/app/build/outputs/apk/slim/release/`):
+
+- `app-slim-release-unsigned.apk`
+
+Use `:app:assembleFullDebug` / `:app:assembleFullRelease` for the larger `full` Python bundle (offline repository wheels, bundled docs, Vue sources, etc.).
+
+With **`-PmeshchatxAbiPackaging=split`** and more than one ABI in `-PmeshchatxAbis`, Gradle also emits per-ABI APKs under the same flavor folders, plus a universal split APK when enabled.
Notes:
- Release outputs are unsigned by default unless you configure signing.
-- If you only need one variant, run `:app:assembleDebug` or `:app:assembleRelease`.
+- If you only need one build, run for example `:app:assembleSlimDebug` or `:app:assembleSlimRelease`.
- Android targets the ABIs listed in `android/app/build.gradle` (including `armeabi-v7a` when enabled). Building wheels for `armeabi-v7a` needs an Android SDK on `ANDROID_HOME` (see `android/README.md`).
-- You can override ABI selection per build with `-PmeshchatxAbis=<comma-separated list>`, for example `-PmeshchatxAbis=armeabi-v7a`. Universal APKs are emitted only when multiple ABIs are selected.
+- Override ABI selection with `-PmeshchatxAbis=<comma-separated list>` or `MESHCHATX_ABIS`. Override packaging with `-PmeshchatxAbiPackaging=universal|split` or `MESHCHATX_ABI_PACKAGING`.
+- Chaquopy bundle size: **`slim`** flavor (default) syncs a smaller `meshchatx/` tree into `src/slim/python/`; **`full`** flavor syncs the complete tree into `src/full/python/` (including offline repository wheels after fetch when needed). See `android/README.md`.
Additional docs:

diff --git a/android/README.md b/android/README.md
index ca40c3a3..56a8376a 100644
--- a/android/README.md
+++ b/android/README.md
@@ -32,34 +32,54 @@ yes | path/to/cmdline-tools/latest/bin/sdkmanager --licenses
path/to/cmdline-tools/latest/bin/sdkmanager "platforms;android-34" "build-tools;34.0.0"
```
-Build from the `android/` directory:
+Build from the `android/` directory (default **slim** flavor, **universal** ABI packaging):
```bash
-./gradlew assembleDebug
+./gradlew :app:assembleSlimDebug
```
-Debug APK outputs (ABI splits plus universal) are written under `app/build/outputs/apk/debug/`, for example:
+Debug APK example path:
-- `app-arm64-v8a-debug.apk`
-- `app-x86_64-debug.apk`
-- `app-armeabi-v7a-debug.apk`
-- `app-universal-debug.apk`
+- `app/build/outputs/apk/slim/debug/app-slim-debug.apk`
-By default all ABIs are included. To build only specific ABIs, pass a property:
+By default all ABIs are included in that single universal APK. To build only specific ABIs:
```bash
-./gradlew assembleDebug -PmeshchatxAbis=armeabi-v7a
-./gradlew assembleDebug -PmeshchatxAbis=arm64-v8a,x86_64
+./gradlew :app:assembleSlimDebug -PmeshchatxAbis=armeabi-v7a
+./gradlew :app:assembleSlimDebug -PmeshchatxAbis=arm64-v8a,x86_64
```
-`app-universal-*.apk` is produced only when more than one ABI is selected.
+To emit **per-ABI split APKs** (and a universal split when Gradle enables it), set:
+
+```bash
+./gradlew :app:assembleSlimDebug -PmeshchatxAbiPackaging=split
+```
+
+Same property accepts `MESHCHATX_ABI_PACKAGING`.
+
+### Python bundle: `slim` vs `full` flavors
+
+The Chaquopy layer packs `meshchatx/` into `assets/chaquopy/app.imy`. These are **Android product flavors** (separate Gradle variants):
+
+| Flavor | Meaning |
+|--------|--------|
+| **`slim`** (default `isDefault`) | Smaller APK: sync omits Vue sources (`src/frontend`), bundled Reticulum HTML manual (`public/reticulum-docs-bundled`), RNode flasher static files, and **offline repository wheels** (`public/repository-server-bundled`). |
+| **`full`** | Syncs the whole `meshchatx/` tree (Gradle runs `fetchRepositoryBundledWheels` first when bundled wheels are missing). Use when the APK must ship the offline repository mirror and bundled docs. |
+
+Assemble the matching variant:
+
+```bash
+./gradlew :app:assembleSlimDebug -PmeshchatxAbis=arm64-v8a
+./gradlew :app:assembleFullDebug
+./gradlew :app:assembleFullRelease
+```
## Signing Release APKs (optional SourceStamp)
Build release APKs first:
```bash
-./gradlew --no-daemon :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimRelease
```
Create a release signing key (one time):
@@ -131,7 +151,7 @@ For **`armeabi-v7a`**, Chaquopy usually has no prebuilt NumPy wheel; `scripts/bu
- Store source patches in `patches/`.
3. Build the configured ABIs with Chaquopy `build-wheel.py` (via `scripts/build-android-wheels-local.sh`) and place final wheels in `android/vendor/`.
4. Update `android/app/build.gradle` `pip` installs to the new pinned version.
-5. Rebuild with `./gradlew assembleDebug` and verify split outputs (per enabled ABIs), including `app-universal-debug.apk`.
+5. Rebuild with `./gradlew :app:assembleSlimDebug` (or `-PmeshchatxAbiPackaging=split` when you need per-ABI artifacts) and confirm the expected APK under `app/build/outputs/apk/`.
Local host build example (no shell startup files required):

diff --git a/lang/README.de.md b/lang/README.de.md
index 3ed1b9bf..0a5afcd9 100644
--- a/lang/README.de.md
+++ b/lang/README.de.md
@@ -219,30 +219,31 @@ Vom Repository-Root:
# 1) Chaquopy-Wheels gemaess android/app/build.gradle bauen
bash scripts/build-android-wheels-local.sh
-# 2) Beide APK-Varianten bauen
+# 2) Standard-Slim-APKs bauen (universal: ein APK pro Flavor und Build-Typ)
cd android
-./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease
```
-APK-Ausgaben (ABI-Splits plus universelles APK; siehe `splits { abi { ... } }` in `android/app/build.gradle`):
+Ausgaben richten sich nach **Product Flavors** `slim` / `full` (Groesse des Python-Baums) und **ABI-Packaging** `universal` (Standard) oder `split` (siehe `android/app/build.gradle`).
-Debug (`android/app/build/outputs/apk/debug/`):
+Mit **`-PmeshchatxAbiPackaging=universal`** (Standard) enthaelt ein APK alle gewaehlten ABIs.
-- `app-arm64-v8a-debug.apk` (ARM64-Geraete)
-- `app-x86_64-debug.apk` (x86_64-Emulatoren)
-- `app-universal-debug.apk` (alle gebundelten ABIs in einem Paket)
+Debug (`android/app/build/outputs/apk/slim/debug/`):
-Release (`android/app/build/outputs/apk/release/`):
+- `app-slim-debug.apk`
-- `app-arm64-v8a-release-unsigned.apk`
-- `app-x86_64-release-unsigned.apk`
-- `app-universal-release-unsigned.apk`
+Release (`android/app/build/outputs/apk/slim/release/`):
+
+- `app-slim-release-unsigned.apk`
+
+Fuer den vollen Python-Baum: `:app:assembleFullDebug` oder `:app:assembleFullRelease`.
Hinweise:
- Release-Ausgaben sind standardmaessig unsigniert, sofern keine Signatur konfiguriert ist.
-- Wenn nur eine Variante noetig ist: `:app:assembleDebug` oder `:app:assembleRelease`.
-- Android zielt auf die ABIs `arm64-v8a` und `x86_64` gemaess `android/app/build.gradle`.
+- Fuer eine einzelne Build-Variante z. B.: `:app:assembleSlimDebug` oder `:app:assembleSlimRelease`.
+- ABI: `-PmeshchatxAbis` oder `MESHCHATX_ABIS`; Packaging: `-PmeshchatxAbiPackaging` oder `MESHCHATX_ABI_PACKAGING`.
+- Chaquopy-Baum `meshchatx/`: **`slim`** nach `src/slim/python/`, **`full`** nach `src/full/python/`. Details in [`android/README.md`](../android/README.md).
Weitere Dokumentation:

diff --git a/lang/README.it.md b/lang/README.it.md
index 3deef92d..02ff3851 100644
--- a/lang/README.it.md
+++ b/lang/README.it.md
@@ -219,30 +219,31 @@ Dalla root del repository:
# 1) Build delle wheel Chaquopy usate da android/app/build.gradle
bash scripts/build-android-wheels-local.sh
-# 2) Build di entrambe le varianti APK
+# 2) Build degli APK slim predefiniti (universal: un APK per flavor e tipo di build)
cd android
-./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease
```
-Output APK (split degli ABI e APK universale; vedere `splits { abi { ... } }` in `android/app/build.gradle`):
+Gli output dipendono dai **product flavors** `slim` / `full` (dimensione dell'albero Python) e dall **imballaggio ABI** `universal` (predefinito) o `split` (vedi `android/app/build.gradle`).
-Debug (`android/app/build/outputs/apk/debug/`):
+Con **`-PmeshchatxAbiPackaging=universal`** (predefinito), un solo APK contiene tutti gli ABI selezionati.
-- `app-arm64-v8a-debug.apk` (dispositivi ARM64)
-- `app-x86_64-debug.apk` (emulatori x86_64)
-- `app-universal-debug.apk` (tutti gli ABI inclusi in un unico pacchetto)
+Debug (`android/app/build/outputs/apk/slim/debug/`):
-Release (`android/app/build/outputs/apk/release/`):
+- `app-slim-debug.apk`
-- `app-arm64-v8a-release-unsigned.apk`
-- `app-x86_64-release-unsigned.apk`
-- `app-universal-release-unsigned.apk`
+Release (`android/app/build/outputs/apk/slim/release/`):
+
+- `app-slim-release-unsigned.apk`
+
+Per il bundle Python completo: `:app:assembleFullDebug` o `:app:assembleFullRelease`.
Note:
- Gli output release sono non firmati di default se non configurate le firme.
-- Se serve una sola variante: `:app:assembleDebug` o `:app:assembleRelease`.
-- Android punta agli ABI `arm64-v8a` e `x86_64` come in `android/app/build.gradle`.
+- Per una sola build, ad esempio: `:app:assembleSlimDebug` o `:app:assembleSlimRelease`.
+- ABI: `-PmeshchatxAbis` o `MESHCHATX_ABIS`; imballaggio: `-PmeshchatxAbiPackaging` o `MESHCHATX_ABI_PACKAGING`.
+- Albero `meshchatx/` per Chaquopy: **`slim`** in `src/slim/python/`, **`full`** in `src/full/python/`. Dettagli in [`android/README.md`](../android/README.md).
Documentazione aggiuntiva:

diff --git a/lang/README.ja.md b/lang/README.ja.md
index 52667e51..07ca3a72 100644
--- a/lang/README.ja.md
+++ b/lang/README.ja.md
@@ -219,30 +219,31 @@ MeshChatX はネイティブ Android APK のビルドに対応しています(
# 1) android/app/build.gradle で使う Chaquopy 用ホイールをビルド
bash scripts/build-android-wheels-local.sh
-# 2) 両方の APK バリアントをビルド
+# 2) 既定の slim APK をビルド(universal: フレーバーとビルドタイプごとに 1 つの APK)
cd android
-./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease
```
-APK の出力(ABI 分割と universal APK。`android/app/build.gradle` の `splits { abi { ... } }` を参照):
+**product flavors** `slim` / `full`(Python ツリーの大きさ)と **ABI パッケージング** `universal`(既定)または `split`(`android/app/build.gradle`)で出力が決まります。
-デバッグ(`android/app/build/outputs/apk/debug/`):
+**`-PmeshchatxAbiPackaging=universal`**(既定)では、選択した ABI がすべて入った単一 APK です。
-- `app-arm64-v8a-debug.apk`(ARM64 端末)
-- `app-x86_64-debug.apk`(x86_64 エミュレータ)
-- `app-universal-debug.apk`(同梱 ABI を 1 パッケージに)
+デバッグ(`android/app/build/outputs/apk/slim/debug/`):
-リリース(`android/app/build/outputs/apk/release/`):
+- `app-slim-debug.apk`
-- `app-arm64-v8a-release-unsigned.apk`
-- `app-x86_64-release-unsigned.apk`
-- `app-universal-release-unsigned.apk`
+リリース(`android/app/build/outputs/apk/slim/release/`):
+
+- `app-slim-release-unsigned.apk`
+
+より大きい Python バンドルが必要なら `:app:assembleFullDebug` または `:app:assembleFullRelease`。
備考:
- リリース出力は署名を設定しない限りデフォルトで未署名です。
-- どちらか一方でよい場合は `:app:assembleDebug` または `:app:assembleRelease`。
-- Android の対象 ABI は `android/app/build.gradle` で設定されている `arm64-v8a` と `x86_64` です。
+- 1 種類だけ欲しい場合は例: `:app:assembleSlimDebug` または `:app:assembleSlimRelease`。
+- ABI は `-PmeshchatxAbis` または `MESHCHATX_ABIS`、パッケージングは `-PmeshchatxAbiPackaging` または `MESHCHATX_ABI_PACKAGING` で上書きできます。
+- Chaquopy の `meshchatx/` ツリー: **`slim`** は `src/slim/python/` に小さい同期、**`full`** は `src/full/python/` に完全同期。詳細は [`android/README.md`](../android/README.md)。
追加ドキュメント:

diff --git a/lang/README.ru.md b/lang/README.ru.md
index dbed3475..9b9bf0f4 100644
--- a/lang/README.ru.md
+++ b/lang/README.ru.md
@@ -219,30 +219,31 @@ MeshChatX поддерживает нативные Android APK (не тольк
# 1) Собрать колёса Chaquopy для android/app/build.gradle
bash scripts/build-android-wheels-local.sh
-# 2) Собрать обе вариации APK
+# 2) Собрать slim APK по умолчанию (universal: один APK на flavor и тип сборки)
cd android
-./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease
```
-Выходные APK (разбиение по ABI и универсальный APK; см. `splits { abi { ... } }` в `android/app/build.gradle`):
+Выходы определяются **product flavors** `slim` / `full` (размер дерева Python) и **ABI-упаковкой** `universal` (по умолчанию) или `split` (см. `android/app/build.gradle`).
-Отладка (`android/app/build/outputs/apk/debug/`):
+При **`-PmeshchatxAbiPackaging=universal`** (по умолчанию) один APK содержит все выбранные ABI.
-- `app-arm64-v8a-debug.apk` (устройства ARM64)
-- `app-x86_64-debug.apk` (эмуляторы x86_64)
-- `app-universal-debug.apk` (все включённые ABI в одном пакете)
+Отладка (`android/app/build/outputs/apk/slim/debug/`):
-Релиз (`android/app/build/outputs/apk/release/`):
+- `app-slim-debug.apk`
-- `app-arm64-v8a-release-unsigned.apk`
-- `app-x86_64-release-unsigned.apk`
-- `app-universal-release-unsigned.apk`
+Релиз (`android/app/build/outputs/apk/slim/release/`):
+
+- `app-slim-release-unsigned.apk`
+
+Для полного Python-бандла: `:app:assembleFullDebug` или `:app:assembleFullRelease`.
Примечания:
- Релизные артефакты по умолчанию не подписаны, если не настроена подпись.
-- Если нужна одна вариация: `:app:assembleDebug` или `:app:assembleRelease`.
-- Целевые ABI — `arm64-v8a` и `x86_64` согласно `android/app/build.gradle`.
+- Для одной сборки, например: `:app:assembleSlimDebug` или `:app:assembleSlimRelease`.
+- ABI: `-PmeshchatxAbis` или `MESHCHATX_ABIS`; упаковка: `-PmeshchatxAbiPackaging` или `MESHCHATX_ABI_PACKAGING`.
+- Дерево `meshchatx/` для Chaquopy: **`slim`** синхронизируется в `src/slim/python/`, **`full`** в `src/full/python/`. Подробнее в [`android/README.md`](../android/README.md).
Дополнительная документация:

diff --git a/lang/README.zh.md b/lang/README.zh.md
index 9af477da..c30145d0 100644
--- a/lang/README.zh.md
+++ b/lang/README.zh.md
@@ -219,30 +219,31 @@ MeshChatX 支持构建原生 Android APK(不仅限于 Termux)。
# 1) 构建 android/app/build.gradle 所需的 Chaquopy 轮子
bash scripts/build-android-wheels-local.sh
-# 2) 构建两种 APK 变体
+# 2) 构建默认 slim APK(universal:每种 flavor + 构建类型一个 APK)
cd android
-./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
+./gradlew --no-daemon :app:assembleSlimDebug :app:assembleSlimRelease
```
-APK 输出(ABI 分包与 universal APK;见 `android/app/build.gradle` 中的 `splits { abi { ... } }`):
+输出由 **product flavors** `slim` / `full`(Python 树大小)和 **ABI 打包** `universal`(默认)或 `split`(见 `android/app/build.gradle`)决定。
-调试(`android/app/build/outputs/apk/debug/`):
+**`-PmeshchatxAbiPackaging=universal`**(默认)下,单个 APK 包含所选的全部 ABI。
-- `app-arm64-v8a-debug.apk`(ARM64 设备)
-- `app-x86_64-debug.apk`(x86_64 模拟器)
-- `app-universal-debug.apk`(所有已打包 ABI 的单包)
+调试(`android/app/build/outputs/apk/slim/debug/`):
-发布(`android/app/build/outputs/apk/release/`):
+- `app-slim-debug.apk`
-- `app-arm64-v8a-release-unsigned.apk`
-- `app-x86_64-release-unsigned.apk`
-- `app-universal-release-unsigned.apk`
+发布(`android/app/build/outputs/apk/slim/release/`):
+
+- `app-slim-release-unsigned.apk`
+
+需要更大 Python 包时用 `:app:assembleFullDebug` 或 `:app:assembleFullRelease`。
说明:
- 若未配置签名,发布构建默认未签名。
-- 若只需一种变体,可运行 `:app:assembleDebug` 或 `:app:assembleRelease`。
-- Android 目标 ABI 为 `android/app/build.gradle` 中配置的 `arm64-v8a` 与 `x86_64`。
+- 若只需一种构建,可运行例如 `:app:assembleSlimDebug` 或 `:app:assembleSlimRelease`。
+- ABI 可用 `-PmeshchatxAbis` 或 `MESHCHATX_ABIS` 覆盖;打包方式用 `-PmeshchatxAbiPackaging` 或 `MESHCHATX_ABI_PACKAGING`。
+- Chaquopy 的 `meshchatx/` 树:**`slim`** 同步到 `src/slim/python/`(较小),**`full`** 同步到 `src/full/python/`(完整)。详见 [`android/README.md`](../android/README.md)。
更多文档:


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────